home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / lu62 / debug / syscm.asm < prev    next >
Assembly Source File  |  1996-07-10  |  4KB  |  152 lines

  1. ;**********************************************************
  2. ;*                                                        *
  3. ;*                SysCm                                   *
  4. ;*                                                        *
  5. ;* Function:  Execute MS-DOS command.                     *
  6. ;* Input:     DS:SI points to buffer with command         *
  7. ;*            line.                                       *
  8. ;*            AX == 0 - execute program                   *
  9. ;*            AX == 1 - execute the second copy of        *
  10. ;*                      Command.com                       *
  11. ;* Output:    None.                                       *
  12. ;*                                                        *
  13. ;* Last modification: 93-02-02 11:01.                     *
  14. ;*                                                        *
  15. ;*                                                        *
  16. ;*  CopyRight 1995. Nicholas Poljakov all rights reserved.*
  17. ;*                                                        *
  18. ;**********************************************************
  19. .DOSSEG
  20. .MODEL SMALL
  21.  
  22. include c:\m61\include\dos.inc
  23. include c:\m61\include\bios.inc
  24. include c:\m61\include\macros.inc
  25. include parms.inc
  26.  
  27. EXTRN    DosCom:BYTE
  28. EXTRN    AplParm:BYTE
  29.  
  30. PUBLIC  params, keep_ss, keep_sp, SysCm, UpStr
  31.  
  32. .DATA
  33.  
  34. params   DW    7 dup(0) ;¡π½Ñó«⌐ í½«¬ »áαá¼ÑΓα«ó
  35. keep_ss  DW    0        ;»ÑαѼѡ¡á∩ ñ½∩ ss
  36. keep_sp  DW    0        ;»ÑαѼѡ¡á∩ ñ½∩ sp
  37. ArgLt    DB    0        ; length of next field
  38. argsh    DB    '/c '
  39. argst    DB 60 DUP(0)
  40.  
  41. .CODE
  42.  
  43. SysCm    PROC
  44.      @SaveRegs ax,bx,cx,dx,ds,si,es,di,bp
  45.          mov   bp, sp
  46.  
  47. ;---»«ñú«Γáó½¿óáѼ »«½Ñ »áαá¼ÑΓα«ó
  48.  
  49.          mov   ax, ds
  50.          mov   es, ax
  51.  
  52.          mov   di, OFFSET params
  53.          xor   ax, ax
  54.          mov   cx, 7
  55.          cld
  56.          rep   stosw
  57.  
  58. ;---ß«σαá¡¿Γ∞ ¬«»¿¿ ss ¿ sp
  59.  
  60.          mov   keep_ss, ss       ;ß«σαá¡∩Ѽ ss
  61.          mov   keep_sp, sp       ;ß«σαá¡∩Ѽ sp
  62.  
  63.          mov   ax, WORD PTR [bp + 16]
  64.          and   ax, ax
  65.          jz    ExPgm    ; load and execute the program
  66.  
  67. ;*
  68. ;*  Call second copy of Command.com
  69. ;*
  70.          mov   dx, OFFSET DosCom
  71.          xor   ch, ch
  72.          mov   cl, BYTE PTR [si]  ; length of command line
  73.          mov   di, OFFSET argst
  74.          inc   si       ; skip count field
  75.          cld
  76.          rep   movsb    ; prepare arguments field
  77.  
  78.          mov   si, WORD PTR [bp + 6] ; restore SI
  79.          mov   cl, BYTE PTR [si]  ; length of command line
  80.          add   cx, 4
  81.          mov   bx, cx
  82.          mov   si, OFFSET ArgLt
  83.          mov   BYTE PTR [si + bx], 13
  84.          inc   bx
  85.          mov   BYTE PTR [si + bx], 0
  86.          dec   bx
  87.          mov   ArgLt, bl
  88.          mov   WORD PTR params + 2, si
  89.          mov   ax, ds
  90.          mov   WORD PTR params + 4, ax
  91.          jmp   short ExCall
  92.  
  93. ExPgm:
  94. ;---π¬áºδóáѼ ¡á ßΓα«¬π ¿¼Ñ¡¿ Σá⌐½á
  95.  
  96.          mov   dx, WORD PTR [bp + 6] ; input SI
  97.          mov   bx, OFFSET AplParm
  98.          lea   bx, ds:[bx].Args
  99.          mov   WORD PTR params + 2, bx
  100.          mov   bx, ds
  101.          mov   WORD PTR params + 4, bx
  102. ExCall:
  103.          mov   bx, OFFSET params
  104.  
  105. ;---ºáúαπº¬á »α«úαá¼¼δ
  106.  
  107.          mov   ah,4bh           ;Σπ¡¬µ¿∩ exec
  108.          mov   al,0             ;óδí¿αáѼ "ºáúαπº¬π ¿ ºá»π߬"
  109.          int   21h              ;ºá»π߬áѼ ºáñáτπ
  110.  
  111. ;---ó»«ß½ÑñßΓó¿¿, ó«ßßΓá¡áó½¿óáѼ αÑú¿ßΓαδ
  112.  
  113.          mov   ax, _DATA        ;ó«ßßΓá¡áó½¿óáѼ ds
  114.          mov   ds, ax
  115.          mov   ss, keep_ss      ;ó«ßßΓá¡áó½¿óáѼ ss
  116.          mov   sp, keep_sp      ;ó«ßßΓá¡áó½¿óáѼ sp
  117.  
  118.      @RestoreRegs
  119.          ret
  120. SysCm    ENDP
  121.  
  122. UpStr   PROC
  123. ;*
  124. ;*  Convert string points SI to "upper case".
  125. ;*
  126.     @SaveRegs si,di,es
  127.         cld
  128.         mov    ax, ds
  129.         mov    es, ax
  130.         mov    di, si
  131.  
  132. UpCycl:
  133.         lodsb
  134.         and    al, al
  135.         jz     UpExit
  136.         cmp    al, 61h
  137.         jb     StChar
  138.         cmp    al, 7ah
  139.         ja     StChar
  140.         sub    al, 20h
  141.  
  142. StChar:
  143.         stosb
  144.         jmp    short UpCycl
  145.  
  146. UpExit:
  147.     @RestoreRegs
  148.         ret
  149. UpStr   ENDP
  150.  
  151.          END
  152.